﻿#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication.h"
#include "login.h"
#include "Registe.h"
#include "connection.h"
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QString>
#include <QMessageBox>
#include "menu.h"
#include "Ticket.h"
#include "Taxi.h"
#include "Hotel.h"
#include "Order.h"
#include "Road.h"
#include <vector>
#include <QDate>
#include <QTime>
#ifdef WIN32  
#pragma execution_character_set("utf-8")  
#endif
class QtWidgetsApplication : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication(QWidget *parent = Q_NULLPTR);
    ~QtWidgetsApplication();

/*--------------------------------------------登录窗口---------------*/
public slots:
    // 注册按钮处理逻辑
    void OnRegBtn();
    // 退出按钮处理逻辑
    void OnBackBtn();
    // 登录按钮处理逻辑
    void OnLoginBtn();
private:
    // 初始化一些槽链接
    void ConnectInit();

/*-------------------------------------------注册窗口----------------*/
public slots:
    // 注册按钮响应函数
    void OnRegwindowRegBtn();
    // 返回按钮响应函数
    void OnRegwindowBackBtn();
private:
    // 信号槽
    void RegWindowConnectInit();

/*-------------------------------------------菜单窗口---------------------*/
public slots:
    // 退出按钮响应函数
    void OnMenuWindowBackBtn();
    // 订机票按钮响应函数
    void OnMenuWindowBookTicketBtn();
    // 订旅馆按钮响应函数
    void OnMenuWindowBookHotelBtn();
    // 订出租车按钮响应函数
    void OnMenuWindowBookTaxiBtn();
    // 个人订单按钮响应函数
    void OnMenuWindowOrderBtn();
    // 路线按钮响应函数
    void OnMenuWindowRoadBtn();
    // 管理数据库按钮响应函数
    void OnMenuWindowManageBtn();

private:
    // 信号槽
    void MenuWindowConnectInit();

/*-------------------------------------------订飞机票窗口-----------------*/
public slots:
    // 退出按钮响应函数
    void OnBookTicketWindowBackBtn();
    // 选择按钮响应函数
    void OnBookTicketWindowSelectBtn();
private:
    // 信号槽
    void BookTicketWindowConnectInit();
private:
    // 将票务信息添加到窗口
    void AddTicketToBookTicketWindow();

/*----------------------------------------------订旅馆窗口-------------------------*/
public slots:
    // 退出按钮响应函数
    void OnBookHotelWindowBackBtn();
    // 选择按钮响应函数
    void OnBookHotelWindowSelectBtn();
private:
    // 信号槽
    void BookHotelWindowConnectInit();
private:
    // 将票务信息添加到窗口
    void AddRoomsToBookHotelWindow();

/*------------------------------------------------订车窗口-------------------------*/
public slots:
    // 退出按钮响应函数
    void OnBookCarWindowBackBtn();
    // 选择按钮响应函数
    void OnBookCarWindowSelectBtn();
private:
    // 信号槽
    void BookCarWindowConnectInit();
private:
    // 将车信息添加到窗口
    void AddCarsToBookCarWindow();

/*----------------------------------------------查询订单窗口-------------------------------*/
public slots:
    // 退出按钮响应函数
    void OnPeekOrderWindowBackBtn();
    // 删除按钮响应函数
    void OnPeekOrderWindowDeleteBtn();
private:
    // 信号槽
    void PeekOrderWindowConnectInit();
private:
    // 将订单添加到表格控件
    void AddOrderToPeekOrderWindow();



/*----------------------------------------------查询路线窗口-------------------------------*/
public slots:
    // 退出按钮响应函数
    void OnPeekRoadWindowBackBtn();
private:
    // 信号槽
    void PeekRoadWindowConnectInit();
private:
    // 将订单添加到表格控件
    void AddRoadToPeekRoadWindow();

private:
    Login       *loginWindow;               // 登录
    QString     user_id;

    Registe     *regWindow;                 // 注册
    bool        regFlag;                    // 标记是否有注册窗口

    menu        *m_pMenuWindow;             // 菜单

    Ticket      *m_pBookTicketWindow;       // 订票
    QSqlQuery   *m_pqueryTicket;            // 票务查询使用

    Hotel       *m_pBookHotelWindow;        // 订旅馆
    QSqlQuery   *m_pqueryHotel;             // 旅馆查询使用

    Taxi        *m_pBookTaxiWindow;         // 订出驻车
    QSqlQuery   *m_pqueryTaxi;              // 出租车查询使用

    Order       *m_pPeekOrderWindow;        // 查询订单信息
    QSqlQuery   *m_pqueryOrder;             // 显示订单使用
    std::vector<std::vector<QString>>* m_pdelBuf;// 删除订单做映射使用

    Road        *m_pPeekRoadWindow;         // 查询路线
    QSqlQuery   *m_pqueryRoad;              // 查询路线使用

    connection  *db;                        // 数据库
};
